package com.sakura.system.controller.yzccontroller;

import com.sakura.system.coommon.response.ResponseResult;
import com.sakura.system.entity.yzc.SysHall;
import com.sakura.system.service.impl.yzcimpl.SysHallServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("${app.router.url}")
public class SysHallController extends BaseController {

    @Autowired
    private SysHallServiceImpl sysHallService;

    /**
     * 查询所有影厅的信息。
     *
     * @param sysHall 包含影厅查询条件的对象，可以为空。
     * @return 返回查询结果的响应体。
     */
    @GetMapping("/sysHall")
    public ResponseResult findAllHalls(SysHall sysHall) {
        // 开始分页
        startPage();
        // 执行查询并返回结果
        return getResult(sysHallService.findAllHalls(sysHall));
    }

    /**
     * 根据大厅ID查询大厅信息
     *
     * @param hallId 大厅的唯一标识符
     * @return 返回查询结果，封装在ResponseResult对象中
     */
    @GetMapping("/sysHall/{hallId}")
    public ResponseResult findHallById(@PathVariable Long hallId) {
        // 初始化SysHall对象并设置大厅ID
        SysHall sysHall = new SysHall();
        sysHall.setHallId(hallId);
        // 调用服务层方法查询大厅信息，并封装返回结果
        return getResult(sysHallService.findHallById(sysHall));
    }

    /**
     * 添加影厅信息
     *
     * @param sysHall 影厅信息对象，通过RequestBody接收前端传来的JSON数据，必须是有效的。
     * @return 返回操作结果，包括成功与否、错误信息等。
     */
    @PostMapping("/sysHall")
    public ResponseResult addHall(@Validated @RequestBody SysHall sysHall) {
        // 调用服务层方法添加礼堂信息，并获取操作结果
        return getResult(sysHallService.addHall(sysHall));
    }

    /**
     * 更新场馆信息
     *
     * @param sysHall 经过验证的场馆信息对象，通过RequestBody接收前端传来的JSON数据
     * @return 返回操作结果，包括操作是否成功、影响的行数等信息
     */
    @PutMapping("/sysHall")
    public ResponseResult updateHall(@Validated @RequestBody SysHall sysHall) {
        // 调用服务层方法，更新场馆信息，并返回更新的行数
        int rows = sysHallService.updateHall(sysHall);
        // 根据更新的行数，生成并返回相应的操作结果
        return getResult(rows);
    }

    /**
     * 删除影厅信息
     *
     * @param sysHalls 要删除的影厅对象数组，通过RequestBody接收前端传来的JSON数组
     * @return 返回操作结果，封装在ResponseResult对象中
     */
    @PostMapping("/sysHall/delete")
    public ResponseResult deleteHall(@RequestBody SysHall[] sysHalls) {
        // 调用服务层方法，删除影厅信息，并获取操作结果
        return getResult(sysHallService.deleteHall(sysHalls));
    }

}
